#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
洪水预报智能代理模块

基于LangChain框架实现的智能对话代理系统，包含参数提取、验证和对话管理功能
"""

from .parameter_validator_tool import ParameterValidatorTool
from .flood_forecast_agent import FloodForecastAgent

# 导入配置
try:
    from config.config import OLLAMA_CONFIG
except ImportError:
    # 如果配置文件不存在，使用默认配置
    OLLAMA_CONFIG = {
        "base_url": "http://10.48.0.81:11434",
        "chat_model": "qwq:latest"
    }

__version__ = "1.0.0"
__author__ = "Flood Forecast Team"
__description__ = "基于LangChain的洪水预报智能代理系统"

__all__ = [
    "ParameterValidatorTool", 
    "FloodForecastAgent",
    "DEFAULT_LLM_CONFIG",
    "OLLAMA_LLM_CONFIG",
    "create_agent",
    "create_ollama_agent"
]

# 模块级别的配置
DEFAULT_LLM_CONFIG = {
    "type": "ollama",  # 使用Ollama模型
    "model": "qwq:latest",
    "temperature": 0.1,
    "max_tokens": 1000
}

# Ollama配置（从配置文件读取）
OLLAMA_LLM_CONFIG = {
    "type": "ollama",
    "model": OLLAMA_CONFIG.get("chat_model", "llama2"),
    "temperature": 0.1,
    "base_url": OLLAMA_CONFIG.get("base_url", "http://10.48.0.81:11434")
}

DEFAULT_AGENT_CONFIG = {
    "max_iterations": None,
    "max_execution_time": None
}

# 便捷函数
def create_agent(llm_config: dict = None, agent_config: dict = None) -> FloodForecastAgent:
    """
    创建洪水预报智能代理的便捷函数
    
    Args:
        llm_config: LLM配置，如果为None则使用默认配置
        agent_config: 代理配置，如果为None则使用默认配置
    
    Returns:
        FloodForecastAgent: 配置好的智能代理实例
    """
    final_llm_config = DEFAULT_LLM_CONFIG.copy()
    if llm_config:
        final_llm_config.update(llm_config)
    
    final_agent_config = DEFAULT_AGENT_CONFIG.copy()
    if agent_config:
        final_agent_config.update(agent_config)
    
    return FloodForecastAgent(
        llm_config=final_llm_config,
        **final_agent_config
    )

def create_ollama_agent(agent_config: dict = None) -> FloodForecastAgent:
    """
    使用配置文件中的Ollama配置创建智能代理的便捷函数
    
    Args:
        agent_config: 代理配置，如果为None则使用默认配置
    
    Returns:
        FloodForecastAgent: 配置好的Ollama智能代理实例
    """
    return create_agent(llm_config=OLLAMA_LLM_CONFIG, agent_config=agent_config)